<?
/*
		topGames: an iRC games bot
		Copyright (C) 2008 Marcos Garc�a <marcosgdf@gmail.com>
    
		This file is part of topGames

		This program is free software: you can redistribute it and/or modify
		it under the terms of the GNU General Public License as published by
		the Free Software Foundation, either version 3 of the License, or
		any later version.

		This program is distributed in the hope that it will be useful,
		but WITHOUT ANY WARRANTY; without even the implied warranty of
		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
		GNU General Public License for more details.

		You should have received a copy of the GNU General Public License
		along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

class bot {
	function action($tg,$data,$nick) {
		if (is_array($data) && (count($data) >= 1)) {
			$replaceador = str_replace(":","",$data[0]);
			$separador = substr($replaceador,0,1);
			if ($separador == "!" || ($separador == $_CFG["botnum"])) {
				$command = array(substr($replaceador,1),strtolower($data[1]));
				if ($command[0] == "canal") {
					if ($command[1] == "joinall") $this->canal($tg,"joinall");
					elseif ($command[1] == "partall") $this->canal($tg,"partall");
					elseif ($command[1] == "add") $this->canal($tg,"add",$data[2],$nick);
					elseif ($command[1] == "del") $this->canal($tg,"del",$data[2],$nick);
					elseif ($command[1] == "all") $this->canal($tg,"all");
					elseif ($command[1] == "list") $this->canal($tg,"list",$data[2]);
					elseif ($command[1] == "suspend") $this->canal($tg,"suspend",$data[2],$nick);
					elseif ($command[1] == "unsuspend") $this->canal($tg,"unsuspend",$data[2],$nick);
					elseif ($command[1] == "join") $this->canal($tg,"join",$data[2],$nick);
					elseif ($command[1] == "part") $this->canal($tg,"part",$data[2],$nick);
					elseif ($command[1] == "info") $this->canal($tg,"info",$data[2]);
					elseif ($command[1] == "forbid") $this->canal($tg,"forbid",$data,$nick);
					elseif ($command[1] == "unforbid") $this->canal($tg,"unforbid",$data[2],$nick);
					elseif ($command[1] == "log") {
						if (isset($data[3])) $this->canal($tg,"log",array($data[2],$data[3]),$nick);
						else $this->canal($tg,"log",$data[2],$nick);
					}
					elseif (empty($command[1])) $this->canal($tg,'help');
				}
				elseif ($command[0] == "user") {
					if ($command[1] == "add") $this->user($tg,"add",$data[2],$nick);
					elseif ($command[1] == "del") $this->user($tg,"del",$data[2],$nick);
					elseif ($command[1] == "suspend") $this->user($tg,"suspend",$data[2]);
					elseif ($command[1] == "unsuspend") $this->user($tg,"unsuspend",$data[2]);
					elseif ($command[1] == "info") $this->user($tg,"info",$data[2]);
					elseif ($command[1] == "forbid") $this->user($tg,"forbid",$data,$nick);
					elseif ($command[1] == "unforbid") $this->user($tg,"unforbid",$data[2]);
					elseif ($command[1] == "log") {
						if (isset($data[3])) $this->user($tg,"log",array($data[2],$data[3]));
						else $this->user($tg,"log",$data[2]);
					}
					elseif (empty($command[1])) $this->user($tg,'help');
				}
				elseif ($command[0] == "banco") {
					if ($command[1] == "set") $this->banco($tg,"set",array($data[2],$data[3]));
					elseif ($command[1] == "chg") $this->banco($tg,"chg",array($data[2],$data[3]));
					elseif ($command[1] == "del") $this->banco($tg,"del",$data[2]);
					elseif (empty($command[1])) $this->banco($tg,'help');
				}
				elseif ($command[0] == "set") {
					if ($command[1] == "ajoin") $this->set($tg,"ajoin",$nick,$data[2]);
					elseif ($command[1] == "ignore") $this->set($tg,"ignore",$nick,$data[2]);
					elseif ($command[1] == "bote") $this->set($tg,"bote",$nick,$data[2]);
					elseif ($command[1] == "portero") $this->set($tg,"portero",$nick,$data[2]);
					elseif (empty($command[1])) $this->set($tg,'help',$nick,'');
				}
				elseif ($command[0] == "preoper") {
					if ($command[1] == "add") $this->preoper($tg,"add",$nick,$data[2]);
					if ($command[1] == "del") $this->preoper($tg,"del",$nick,$data[2]);
					elseif (empty($command[1])) $this->preoper($tg,'help');
				}
				elseif ($command[0] == "oper") {
					if ($command[1] == "add") $this->oper($tg,"add",$nick,$data[2]);
					if ($command[1] == "del") $this->oper($tg,"del",$nick,$data[2]);
					elseif (empty($command[1])) $this->oper($tg,'help');
				}
				elseif ($command[0] == "coadmin") {
					if ($command[1] == "add") $this->admin($tg,"add",$nick,$data[2]);
					if ($command[1] == "del") $this->admin($tg,"del",$nick,$data[2]);
					elseif (empty($command[1])) $this->admin($tg,'help');
				}
				elseif ($command[0] == "root") $this->root($tg);
				elseif ($command[0] == "uptime") $this->uptime($tg);
				elseif ($command[0] == "tg") $this->tg($tg,$nick,$data);
				elseif ($command[0] == "opers") {
					if ($command[1] == "log") {
						if (isset($data[3])) $this->opers($tg,"log",array($data[2],$data[3]),$nick);
						else $this->opers($tg,"log",$data[2],$nick);
					}
					elseif ($command[1] == "del") $this->opers($tg,"del",array($data[2],$nick));
				}
			}
		}
	}
	function canal($tg,$type,$data=NULL,$nick=NULL) {
		global $_CFG;
		if ($type == "joinall") {
			$allChannelsOut = $tg->getChannels(0);
			if ($allChannelsOut >= 1) {
				$tg->ircMsg(CHANNEL,'Iniciando el proceso de autojoin... (esto puede durar unos minutos)', true);
				$allChannels = $tg->getAutojoin();
				$stringChannels = '';
				foreach ($allChannelsOut AS $channel) {
					$tg->joinChannel($channel);
					$stringChannels .= $channel.' ';
				}
				if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'added',$nick);
				if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'joinall');
				$tg->ircMsg(CHANNEL,"He entrado en ".$tg->h(count($allChannelsOut))." canales: ".$tg->h($stringChannels), true); 
			}
			else $tg->ircMsg(CHANNEL,'No hay ningun canal en el que entrar', true);
		}
		elseif ($type == "add") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError(CHANNEL,'!canal add #canal');
			else {
				$channelExists = $tg->isChannelRegistered($data);
				if ($channelExists) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." ya estaba en la base de datos", true);
				else {
					$tg->addChannel($data,$nick);
					$tg->joinChannel($data);
					if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'added',$nick);
					if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'add_channel',$data);
					$tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." ha sido agregado con exito", true);
				}
			}
		}
		elseif ($type == "del") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError(CHANNEL,'!canal del #canal');
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 3) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser como minimo '.$tg->h('operador').' para poder borrar canales', true);
				else {
					$channelExists = $tg->isChannelRegistered($data);
					if (!$channelExists) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no esta en la base de datos", true);
					else {
						$tg->delChannel($data);
						if ($tg->isChannelIn($data)) $tg->partChannel($data);
						if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'deleted',$nick);
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'del_channel',$data);
						$tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." ha sido eliminado con exito", true);
					}
				}
			}
		}
		elseif ($type == "all") {
			$inChannels = $tg->getChannels(1);
			if (!count($inChannels)) $tg->ircMsg(CHANNEL,'No estoy en ningun canal', true);
			else {
				$outChannels = $tg->getChannels(0);
				$totalChannels = count($inChannels) + count($outChannels);
				$channels = '';
				foreach ($inChannels AS $channel) {
					$channels .= $channel.' ';
					$users = $tg->getCountUsersChannel($channel);
					if ($users < 15) $channels .= '('.$users.') ';
				}
				$tg->ircMsg(CHANNEL,"Estoy en".$tg->h(' '.count($inChannels))." /".$tg->h(' '.$totalChannels)." canales: ".$tg->h($channels), true);
			}
		}
		elseif ($type == "list") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!canal list db/suspend/active');
			else {
				$data = strtolower($data);
				$actions = array('db','suspend','active');
				if (!in_array($data,$actions)) $tg->msgSintaxError(CHANNEL,'!canal list db/suspend/active');
				if ($data == "db") {
					$channels = $tg->getRegisteredChannels();
					if (!count($channels)) $tg->ircMsg(CHANNEL,'No hay canales en la base de datos', true);
					else {
						$textMessage = '';
						foreach ($channels AS $channel) $textMessage .= $channel.' ';
						$tg->ircMsg(CHANNEL,"Canales en la base de datos ".$tg->h("(".count($channels).")").": ".$tg->h($textMessage), true);
					}
				}
				elseif ($data == "suspend") {
					$channels = $tg->getSuspendedChannels();
					if (!count($channels)) $tg->ircMsg(CHANNEL,'No hay canales suspensos en la base de datos', true);
					else {
						$textMessage = '';
						foreach ($channels AS $channel) $textMessage .= $channel.' ';
						$tg->ircMsg(CHANNEL,"Canales suspensos ".$tg->h("(".count($channels).")").": ".$tg->h($textMessage), true);
					}
				}
				elseif ($data == "active") { 
					$channels = $tg->getAutojoin();
					if (!count($channels)) $tg->ircMsg(CHANNEL,'No hay canales activos en la base de datos', true);
					else {
						$textMessage = '';
						foreach ($channels AS $channel)	$textMessage .= $channel.' ';
						$tg->ircMsg(CHANNEL,"Canales activos ".$tg->h("(".count($channels).")").": ".$tg->h($textMessage), true);
					}
				}
			}
		}
		elseif ($type == "partall") {
			$inChannels = $tg->getChannels(1);
			if (!count($inChannels)) $tg->ircMsg(CHANNEL,'No estoy en ningun canal', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 3) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser como minimo '.$tg->h('operador').' para poder sacar al bot de los canales', true);
				else {
					$channels = '';
					foreach ($inChannels AS $channel) {
						$tg->partChannel($channel,"Saliendo de todos los canales... en breve dispondra de nuevo de nuestros servicios");
						$channels .= $channel.' ';
					}
					if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'partall');
					$tg->ircMsg(CHANNEL,"He salido de".count(' '.$inChannels)." canales: ".$tg->h($channels), true);
				}
			}
		}
		elseif ($type == "suspend") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError(CHANNEL, '!canal suspend #canal', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('co-administrador').' como minimo para suspender canales.', true);
				else {
					$channelExists = $tg->isChannelRegistered($data);
					if (!$channelExists) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no esta en la base de datos", true);
					else {
						$channelStatus = $tg->isChannelSuspended($data);
						if ($channelStatus) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." ya estaba suspenso", true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."autojoin SET `is_active`='0' WHERE `channel`='$data'");
							$isBotIn = $tg->isChannelIn($data);
							if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'suspended',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'suspend_channel',$data);
							$isBotIn = $tg->isChannelIn($data);
							if ($isBotIn) $tg->partChannel($data,"Canal suspendido. + INFO en #topgames");
							$tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." acaba de ser suspendido", true);
						}
					}
				}
			}
		}
		elseif ($type == "unsuspend") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError(CHANNEL, '!canal unsuspend #canal', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser como minimo '.$tg->h('co-administrador').' para poder quitar el suspenso a los canales', true);
				else {
					$channelExists = $tg->isChannelRegistered($data);
					if (!$channelExists) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no esta en la base de datos", true);
					else {
						$channelStatus = $tg->isChannelSuspended($data);
						if (!$channelStatus) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no estaba suspenso", true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."autojoin SET is_active='1' WHERE `channel`='$data'");
							if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'unsuspended',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'unsuspend_channel',$data);
							$isBotIn = $tg->isChannelIn($data);
							if (!$isBotIn) $tg->joinChannel($data);
							$tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." acaba de ser reactivado", true);
						}
					}
				}
			}
		}
		elseif ($type == "join") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError('!canal join #canal', true);
			else {
				$channelExists = $tg->isChannelRegistered($data);
				if (!$channelExists) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no esta en la base de datos", true);
				else {
					$channelStatus = $tg->isChannelSuspended($data);
					if ($channelStatus) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." esta suspenso", true);
					else {
						$channelIn = $tg->isChannelIn($data);
						if ($channelIn) $tg->ircMsg(CHANNEL,"Ya estoy dentro del canal ".$tg->h($data), true);
						else {
							$tg->joinChannel($data);
							if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'join',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'join',$data);
							$tg->ircMsg(CHANNEL,"He entrado en el canal ".$tg->h($data), true);
						}
					}
				}
			}
		}
		elseif ($type == "part") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError('!canal part #canal', true);
			else {
				$channelExists = $tg->isChannelRegistered($data);
				if (!$channelExists) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no esta en la base de datos", true);
				else {
					$channelStatus = $tg->isChannelSuspended($data);
					if ($channelStatus) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." esta suspenso", true);
					else {
						$channelIn = $tg->isChannelIn($data);
						if (!$channelIn) $tg->ircMsg(CHANNEL,"Ya estoy fuera del canal ".$tg->h($data), true);
						else {
							$tg->partChannel($data,"Saliendo del canal. + INFO en #topgames");
							if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'part',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'part',$data);
							$tg->ircMsg(CHANNEL,"He salido en el canal ".$tg->h($data), true);
						}
					}
				}
			}
		}
		elseif ($type == "info") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError('!canal info #canal', true);
			else {
				$query = $tg->dbSend("SELECT `added_by`, `is_in`, `is_active`, `ctime` FROM ".DB_PREFIX."autojoin WHERE `channel`='$data'");
				if (!mysql_num_rows($query)) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no esta en la base de datos", true);
				else {
					$result = mysql_fetch_row($query);
					$textMessage = 'El canal '.$tg->h($data);
					if ($result[2] == 0) $textMessage .= ' (suspendido)';
					if ($result[0]) $textMessage .= ' fue añadido por '.$tg->h($result[0]);
					if ($result[3]) $textMessage .= ' el dia'.$tg->h(' '.date('d/m/y', $result[3]));
					if ($result[1]) {
						$users = $tg->getCountUsersChannel($data);
						$textMessage .= ". Actualmente el canal tiene".$tg->h(" $users")." usuarios";
					}
					$tg->ircMsg(CHANNEL,$textMessage, true);
				}
			}
		}
		elseif ($type == "forbid") {
			if (empty($data[3]) || (strpos($data[2],"#") === false)) $tg->msgSintaxError(CHANNEL,'!canal forbid #canal razon', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 5) $tg->ircMsg('Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para prohibir canales', true);
				else {
					$channel = $data[2];
					$isRegistered = $tg->isChannelRegistered($channel);
					if ($isRegistered) $tg->ircMsg(CHANNEL,"No se puede añadir un forbid a canales que estan en la base de datos", true);
					else {
						$isForbidden = $tg->isChannelForbidden($channel);
						if ($isForbidden) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($channel)." ya esta prohibido", true);
						else {
							$forbidReason = '';
							for ($i=3;$i < count($data);$i++) $forbidReason .= ' '.$data[$i];
						}
						$tg->dbSend("INSERT INTO ".DB_PREFIX."forbid SET `type`='c', `data`='".$channel."', `oper`='$nick', `ctime`='".time()."', `reason`='$forbidReason'");
						if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($channel,'forbidden',$nick);
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'forbid_channel',$channel);
						$tg->ircMsg(CHANNEL,"Se ha insertado un forbid al canal ".$tg->h($channel)." con la razon".$tg->h(" ".$forbidReason), true);
					}
				}
			}
		}
		elseif ($type == "unforbid") {
			if (empty($data) || (strpos($data,"#") === false)) $tg->msgSintaxError(CHANNEL,'!canal unforbid #canal razon', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 5) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para quitar la prohibicion de canales', true);
				else {
					$isForbidden = $tg->isChannelForbidden($data);
					if (!$isForbidden) $tg->ircMsg(CHANNEL,"El canal ".$tg->h($data)." no esta prohibido", true);
					else {
						$tg->dbSend("DELETE FROM ".DB_PREFIX."forbid WHERE `type`='c' AND `data`='$data'");
						if (LOG_STATUS && (in_array('channels',$_CFG["LOG_REC"]))) $tg->writeChannelLog($data,'unforbidden',$nick);
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'unforbid_channel',$data);
						$tg->ircMsg(CHANNEL,"Se ha borrado el forbid al canal ".$tg->h($data), true);
					}
				}
			}
		}
		elseif ($type == 'help') $tg->ircMsg(CHANNEL, 'Ayuda: '.$tg->h('!canal add/del/join/part/suspend/unsuspend/list/log/forbid/unforbid/partall/joinall/info'), true);
		elseif ($type == "log") {
			if (is_array($data)) {
				if (strpos($data[0],"#") === false || (!is_numeric($data[1]))) $error = '';
			}
			elseif (strpos($data,"#") === false) $error = '';
			if (isset($error)) $tg->msgSintaxError(CHANNEL, '!canal log #canal [num_lineas]', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('co-administrador').' como minimo para poder ver logs de canales', true);
				else {
					if (!is_array($data)) {
						$lines = 3;
						$channel = $data;
					}
					else {
						$lines = $data[1];
						$channel = $data[0];
					}
					$log = $tg->readChannelLog($channel,$lines);
					if (!$log) $tg->ircMsg(CHANNEL,"No existen datos para el canal ".$tg->h($channel), true);
					else {
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'checkedlog_channel',$channel);
						foreach ($log AS $line) {
							$line = unserialize($line);
							$day = getdate($line[0]);
							foreach ($day AS $value=>$content) {
								if ($value == 'mday' || ($value == 'mon' || ($value == 'hours' || ($value == 'minutes' || ($value == 'seconds'))))) {
									if (strlen($content) == 1) $day[$value] = (int) '0'.$content;
								}
							}
							$day = $day["mday"].'/'.$day["mon"].'/'.$day["year"].' - '.$day["hours"].':'.$day["minutes"].':'.$day["seconds"];
							$message = $line[1];
							if ($message == "kick") $textMessage = $line[2].' me ha kickeado del canal';
							elseif ($message == "forbidden") $textMessage = $line[2].' ha prohibido el canal';
							elseif ($message == "unforbidden") $textMessage = $line[2].' ha quitado la prohibicion del canal';
							elseif ($message == "join") $textMessage = $line[2].' ha forzado la entrada al canal';
							elseif ($message == "part") $textMessage = $line[2].' me ha forzado a salir del canal';
							elseif ($message == "suspended") $textMessage = $line[2].' ha suspendido el canal';
							elseif ($message == "unsuspended") $textMessage = $line[2].' ha quitado el suspenso al canal';
							elseif ($message == "added") $textMessage = $line[2].' ha añadido el canal';
							elseif ($message == "deleted") $textMessage = $line[2].' ha borrado el canal';
							$tg->ircMsg(CHANNEL,"[$day] $textMessage", true);
						}
					}
				}
			}
		}
	}
	function user($tg,$type,$data,$nick=NULL) {
		global $_CFG;
		if ($type == "add") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!user add nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if ($userExists) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." ya esta registrado", true);
				else {
					$tg->newUser($data,$nick);
					if (LOG_STATUS && (in_array('users',$_CFG["LOG_REC"]))) $tg->writeUserLog($data,'created',$nick);
					if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'add_user',$data);
					$tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." acaba de ser dado de alta", true);
				}
			}
		}
		elseif ($type == "del") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!user del nick', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 3) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('operador').' como minimo para poder ver eliminar un usuario', true);
				else {
					$userExists = $tg->isNickRegistered($data);
					if (!$userExists) $tg->ircMsg(CHANNEL,"No existe ningun usuario con el nick ".$tg->h($data), true);
					else {
						$isOper = $tg->isNickOper($data);
						if (is_numeric($isOper)) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." es un operador", true);
						else {
							$tg->dbSend("DELETE FROM ".DB_PREFIX."users WHERE `nick`='$data'");
							$tg->dbSend("DELETE FROM ".DB_PREFIX."goles WHERE `user`='$data'");
							$tg->dbSend("DELETE FROM ".DB_PREFIX."oca WHERE `nick`='$data'");
							$tg->mdbSend("DELETE $data");
							if (LOG_STATUS && (in_array('users',$_CFG["LOG_REC"]))) $tg->writeUserLog($data,'erased',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'del_user',$data);
							$tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." acaba de ser borrado de la base de datos", true);
						}
					}
				}
			}
		}
		elseif ($type == "suspend") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!user suspend nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"No existe ningun usuario con el nick ".$tg->h($data), true);
				else {
					$isSuspended = $tg->isNickSuspended($data);
					if ($isSuspended) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." ya estaba suspendido", true);
					else {
						$status = $tg->getNickStatus($nick);
						if ($status < 3) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('operador').' como minimo para quitar el susupenso a un usuario', true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."users SET `is_active`='0' WHERE `nick`='$data'");
							if (LOG_STATUS && (in_array('users',$_CFG["LOG_REC"]))) $tg->writeUserLog($data,'suspended',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'suspend_user',$data);
							$tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." acaba de ser suspendido", true);
						}
					}
				}
			}
		}
		elseif ($type == "unsuspend") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!user unsuspend nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"No existe ningun usuario con el nick ".$tg->h($data), true);
				else {
					$isSuspended = $tg->isNickSuspended($data);
					if (!$isSuspended) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no estaba suspendido", true);
					else {
						$status = $tg->getNickStatus($nick);
						if ($status < 3) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('operador').' como minimo para quitar el suspenso a un usuario', true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."users SET `is_active`='1' WHERE `nick`='$data'");
							if (LOG_STATUS && (in_array('users',$_CFG["LOG_REC"]))) $tg->writeUserLog($data,'unsuspended',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'unsuspend_user',$data);
							$tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." acaba de ser reactivado", true);
						}
					}
				}
			}
		}
		elseif ($type == "info") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!user info nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"No existe ningun usuario con el nick ".$tg->h($data), true);
				else {
					$textMessage = $tg->h($data).' ';
					$query = $tg->dbSend("SELECT `id`, `is_active`, `lineas`, `ctime`, `created_by` FROM ".DB_PREFIX."users WHERE nick='$data'");
					$result = mysql_fetch_row($query);
					if (!$result[1]) $textMessage .= '(suspenso) ';
					$textMessage .= 'ha sido dado de alta ';
					if (strpos($result[4],"#") !== false) $textMessage .= "en"; else $textMessage .= "por";
					$textMessage .= ' '.$tg->h($result[4]).' el'.$tg->h(' '.date('d/m/y',$result[3])).'. Tiene un total de'.$tg->h(' '.$result[2]).' lineas escritas (lvl'.$tg->h(' '.$tg->getLevel('',$result[2])).') y un saldo de';
					$textMessage .= $tg->h(' '.$tg->getMoney($data)).' tEur y'.$tg->h(' '.$tg->getBonos($data)).' topBonos';
					$tg->ircMsg(CHANNEL, $textMessage, true);
					$textMessage = '';
					$hasBank = $tg->getBank($data);
					if ($hasBank) $textMessage = 'En el banco '.$tg->h($hasBank).' tiene'.$tg->h(' '.$tg->getBankMoney($data)).' tEur';
					else $textMessage .= 'No esta en ningun banco.';
					$query = $tg->dbSend("SELECT COUNT(*) FROM bot_oca WHERE `is_finished`='1' AND `nick`='".$data."'");
					$result = mysql_result($query,0);
					if ($result > 0) $textMessage .= ' Ha completado'.$tg->h(' '.$result).' juegos de la oca.';
					$query = $tg->dbSend("SELECT COUNT(*) FROM bot_goles WHERE `type`='g' AND `user`='$data' UNION SELECT COUNT(*) FROM bot_goles WHERE `type`='f' AND `user`='Marquitox'");
					$row = mysql_fetch_row($query);
					$row2 = mysql_fetch_row($query);
					$result = array($row[0],$row2[0]);
					if ($result[0] > 0 && ($result[1] > 0)) {
						$textMessage .= ' Su resultado en penaltis es de: '.$data.$tg->h(' '.$result[0]).' -'.$tg->h(' '.$result[1]).' '.$tg->portero;
					}
					$tg->ircMsg(CHANNEL,$textMessage, true);
				}
			}
		}
		elseif ($type == "forbid") {
			if (empty($data[3])) $tg->ircSintaxError(CHANNEL,'!user forbid nick razon', true);
			else {
				$userExists = $tg->isNickRegistered($data[2]);
				if ($userExists) $tg->ircMsg(CHANNEL,"Para insertar un forbid, el usuario no puede estar registrado", true);
				else {
					$isForbidden = $tg->isNickForbidden($data[2]);
					if ($isForbidden) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data[2])." ya esta con forbid", true);
					else {
						$status = $tg->getNickStatus($nick);
						if ($status < 5) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para poder prohibir un usuario', true);
						else {
							$forbidReason = '';
							for ($i=3;$i < count($data);$i++) $forbidReason .= ' '.$data[$i];
							$tg->dbSend("INSERT INTO ".DB_PREFIX."forbid SET `type`='n', `data`='".$data[2]."', `oper`='$nick', `ctime`='".time()."', `reason`='$forbidReason'");
							if (LOG_STATUS && (in_array('users',$_CFG["LOG_REC"]))) $tg->writeUserLog($data,'forbidden',$nick);
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'forbid_user',$data);
							$tg->ircMsg(CHANNEL,"Se ha insertado un forbid al usuario ".$tg->h($data[2])." con la razon".$tg->h(" $forbidReason"), true);
						}
					}
				}
			}
		}
		elseif ($type == 'help') $tg->ircMsg(CHANNEL, 'Ayuda '.$tg->h('!user add/del/info/log/suspend/unsuspend/forbid/unforbid'), true);
		elseif ($type == "unforbid") {
			if (empty($data[3])) $tg->ircSintaxError(CHANNEL,'!user unforbid nick', true);
			else {
				$isForbidden = $tg->isNickForbidden($data);
				if (!$isForbidden) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no esta con forbid", true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 5) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para desbloquear un usuario', true);
					else {
						$tg->dbSend("DELETE FROM ".DB_PREFIX."forbid WHERE `type`='n' AND `data`='$data'");
						if (LOG_STATUS && (in_array('users',$_CFG["LOG_REC"]))) $tg->writeUserLog($data,'unforbidden',$nick);
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'unforbid_user',$data);
						$tg->ircMsg(CHANNEL,"Se ha borrado el forbid al usuario ".$tg->h($data), true);
					}
				}
			}
		}
		elseif ($type == "log") {
			if (is_array($data) && (!is_numeric($data[1]))) $tg->msgSintaxError(CHANNEL,'!user log nick [num_lineas]', true);
			if (is_array($data) && (empty($data[1]))) $tg->msgSintaxError(CHANNEL,'!user log nick [num_lineas]', true);
			if (!is_array($data) && (empty($data))) $tg->msgSintaxError(CHANNEL,'!user log nick [num_lineas]', true);
			else {
				if (!is_array($data)) {
					$lines = 3;
					$nick = $data;
				}
				else {
					$lines = $data[1];
					$nick = $data[0];
				}
				$log = $tg->readUserLog($channel,$lines);
				if (!$log) $tg->ircMsg(CHANNEL,"No existen datos para el usuario ".$tg->h($nick), true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('co-administrador').' como minimo para poder ver el log de un usuario', true);
					else {
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'checkedlog_user',$data);
						foreach ($log AS $line) {
							$line = unserialize($line);
							$day = getdate($line[0]);
							foreach ($day AS $value=>$content) {
								if ($value == 'mday' || ($value == 'mon' || ($value == 'hours' || ($value == 'minutes' || ($value == 'seconds'))))) {
									if (strlen($content) == 1) $day[$value] = (int) '0'.$content;
								}
							}
							$day = $day["mday"].'/'.$day["mon"].'/'.$day["year"].' - '.$day["hours"].':'.$day["minutes"].':'.$day["seconds"];
							$message = $line[1];
							if ($message == "forbidden") $textMessage = $line[2].' ha prohibido el nick';
							elseif ($message == "unforbidden") $textMessage = $line[2].' ha quitado la prohibicion del nick';
							elseif ($message == "suspended") $textMessage = $line[2].' ha suspendido el nick';
							elseif ($message == "unsuspended") $textMessage = $line[2].' ha quitado el suspenso al nick';
							elseif ($message == "created") {
								if (isset($line[2])) $textMessage = $line[2].' ha creado el nick';
								else $textMessage = 'se ha dado de alta';
							}
							elseif ($message == "deleted") $textMessage = $line[2].' ha borrado el nick';
							$tg->ircMsg(CHANNEL,"[$day] $textMessage", true);
						}
					}
				}
			}
		}
	}
	function preoper($tg,$type,$nick,$data) {
		if ($type == "add") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!preoper add nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no existe", true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 3) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('operador').' como minimo para poder agregar un pre-operador', true);
					else {
						$tg->dbSend("UPDATE ".DB_PREFIX."users SET `gid`='2' WHERE `nick`='$data'");
						$tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' es ahora un '.$tg->h('pre-operador'), true);
						$tg->writeOperLog($nick,'add_preoper',$data);
						$tg->writeOperLog($data,'added_preoper',$nick);
					}
				}
			}
		} elseif ($type == 'del') {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!preoper del nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no existe", true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('operador').' como minimo para poder borrar un pre-operador', true);
					else {
						$oldStatus = $tg->getNickStatus($data);
						if ($oldStatus != 2) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no tiene poderes de pre-operador", true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."users SET `gid`='1' WHERE `nick`='$data'");
							$tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' es ahora un '.$tg->h('usuario normal'), true);
							$tg->writeOperLog($nick,'del_oper',$data);
							$tg->writeOperLog($data,'deleted_oper',$nick);
						}
					}
				}
			}
		}
		elseif ($type == 'help') $tg->ircMsg(CHANNEL,'Ayuda '.$tg->h('!preoper add/del'), true);
	}
	function oper($tg,$type,$nick,$data) {
		if ($type == "add") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!oper add nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' no existe', true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('co-administrador').' como minimo para poder agregar un operador', true);
					else {
						$tg->dbSend("UPDATE ".DB_PREFIX."users SET `gid`='3' WHERE `nick`='$data'");
						$tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' es ahora un '.$tg->h('operador'), true);
						$tg->writeOperLog($nick,'add_oper',$data);
						$tg->writeOperLog($data,'added_oper',$nick);
					}
				}
			}
		} elseif ($type == 'del') {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!oper del nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no existe", true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('co-administrador').' como minimo para poder borrar un operador', true);
					else {
						$oldStatus = $tg->getNickStatus($data);
						if ($oldStatus != 3) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no tiene poderes de operador", true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."users SET `gid`='1' WHERE `nick`='$data'");
							$tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' es ahora un '.$tg->h('usuario normal'), true);
							$tg->writeOperLog($nick,'del_oper',$data);
							$tg->writeOperLog($data,'deleted_oper',$nick);
						}
					}
				}
			}
		}
		elseif ($type == 'help') $tg->ircMsg(CHANNEL,'Ayuda '.$tg->h('!oper add/del'), true);
	}
	function admin($tg,$type,$nick,$data) {
		if ($type == "add") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!coadmin add nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' no existe', true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 5) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para agregar un co-administrador', true);
					else {
						$tg->dbSend("UPDATE ".DB_PREFIX."users SET `gid`='4' WHERE `nick`='$data'");
						$tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' es ahora un '.$tg->h('administrador'), true);
						$tg->writeOperLog($nick,'add_coadmin',$data);
						$tg->writeOperLog($data,'added_coadmin',$nick);
					}
				}
			}
		} elseif ($type == 'del') {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,'!coadmin del nick', true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no existe", true);
				else {
					$status = $tg->getNickStatus($nick);
					if ($status < 5) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para poder borrar un co-administrador', true);
					else {
						$oldStatus = $tg->getNickStatus($data);
						if ($oldStatus != 4) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no tiene poderes de co-administrador", true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."users SET `gid`='1' WHERE `nick`='$data'");
							$tg->ircMsg(CHANNEL,'El usuario '.$tg->h($data).' es ahora un '.$tg->h('usuario normal'), true);
							$tg->writeOperLog($nick,'del_oper',$data);
							$tg->writeOperLog($data,'deleted_oper',$nick);
						}
					}
				}
			}
		}
		elseif ($type == 'help') $tg->ircMsg(CHANNEL,'Ayuda '.$tg->h('!coadmin add/del'), true);
	}
	function root($tg) {
		$tg->ircMsg(CHANNEL, 'Los administradores no se pueden borrar o añadir a traves del bot', true);
	}
	function uptime($tg) {
		$uptimeToString = $tg->timeDiference($tg->ctime);
		$tg->ircMsg(CHANNEL,"El bot lleva".$tg->h($uptimeToString)." conectado", true);
	}
	function tg($tg,$nick,$data) {
		global $_CFG;
		if (empty($data[1])) $tg->msgSintaxError(CHANNEL,'!tg mensaje', true);
		else {
			$status = $tg->getNickStatus($nick);
			if ($status < 4) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('co-administrador').' como minimo para poder enviar un mensaje global', true);
			else {
				$inChannels = $tg->getChannels(1);
				$channels = '';
				foreach ($inChannels AS $channel) $channels .= $channel.',';
				$tmpa = 0;
				$textMessage = '';
				for ($i = 0;$i < count($data);$i++) {
					if ($tmpa == 1) $textMessage .= $data[$i].' '; else $textMessage .= $data[$i].' ';
				}
				$tg->ircMsg($channels, FULL_LOGO.' '.$textMessage.'');
				$textMessage = 'Mensaje enviado a'.$tg->h(' '.count($inChannels));
				if (count($inChannels) == 1) $textMessage .= 'canal';
				else $textMessage .= 'canales';
				if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'massmsg',$data);
				$tg->ircMsg(CHANNEL,$textMessage);
			}
		}
	}
	function banco($tg,$type,$data) {
		global $_CFG;
		if ($type == "set") {
			if (!is_array($data) || (empty($data[0]) || (empty($data[1])))) $tg->msgSintaxError(CHANNEL,"!banco set nick banco", true);
			else {
				$userExists = $tg->isNickRegistered($data[0]);
				if (!$userExists) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data[0])." no esta dado de alta", true);
				else {
					$bancos = array('topbanco','banconacional','interbanco');
					$data[1] = strtolower($data[1]);
					if (!in_array($data[1],$bancos)) $tg->ircMsg(CHANNEL,"El banco ".$tg->h($data[1])." no existe", true);
					else {
						$tg->setBank($data[0],$data[1]);
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'setbank',$data[0]);
						$tg->ircMsg(CHANNEL,"Ahora el banco de ".$tg->h($data[0])." es ".$tg->h($data[1]), true);
					}
				}
			}
		}
		elseif ($type == "del") {
			if (empty($data)) $tg->msgSintaxError(CHANNEL,"!banco del nick", true);
			else {
				$userExists = $tg->isNickRegistered($data);
				if (!$userExists) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data[0])." no esta dado de alta", true);
				else {
					$hasBank = $tg->getBank($data);
					if (!$hasBank) $tg->ircMsg(CHANNEL,"El usuario ".$tg->h($data)." no tiene ninguna cuenta en el banco", true);
					else {
						$bankMoney = $tg->getBankMoney($data);
						$tg->addMoney($data,$bankMoney);
						switch ($hasBank) {
							case 'banconacional': $tg->delMoney($data,500); break;
							case 'interbanco': $tg->delMoney($data,100); break;
						}
						$tg->dbSend("DELETE FROM ".DB_PREFIX."bancos WHERE `nick`='$data'");
						$tg->dbSend("DELETE FROM ".DB_PREFIX."bancosmov WHERE `nick`='$data'");
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'delbank',$data);
						$tg->ircMsg(CHANNEL,"Se ha borrado exitosamente la cuenta de $data", true);
					}
				}
			}
		}
		elseif ($type == "chg") {
			if (!is_array($data) || (empty($data[0]) || (empty($data[1])))) $tg->msgSintaxError(CHANNEL,"!banco chg nick banco", true);
			else {
				$userExists = $tg->isNickRegistered($data[0]);
				if (!$userExists) $tg->ircMsg(CHANNEL,"El usuario ".$data[0]." no esta dado de alta", true);
				else {
					$bancos = array('topbanco','banconacional','interbanco');
					$data[1] = strtolower($data[1]);
					if (!in_array($data[1],$bancos)) $tg->ircMsg(CHANNEL,"El banco ".$data[1]." no existe", true);
					else {
						$hasBank = $tg->getBank($data[0]);
						if (!$hasBank) $tg->ircMsg(CHANNEL,"El usuario ".$data[0]." no tiene ninguna cuenta en el banco", true);
						else {
							$tg->setBank($data[0],$data[1]);
							switch ($hasBank) {
								case 'banconacional': $tg->delMoney($data[0],500); break;
								case 'interbanco': $tg->delMoney($data[0],100); break;
							}
							switch ($data[1]) {
								case 'banconacional': $tg->delMoney($data[0],500); break;
								case 'interbanco': $tg->delMoney($data[0],100); break;
							}
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'chgbank',$data[0]);
							$tg->ircMsg(CHANNEL,"Migracion exitosa. Ahora ".$data[0]." forma parte de ".$data[1], true);
						}
					}
				}
			}
		}
		elseif ($type == 'help') $tg->ircMsg(CHANNEL, 'Ayuda '.$tg->h('!banco chg/set/del'), true);
	}
	function set($tg,$type,$nick,$data) {
		global $_CFG;
		$status = $tg->getNickStatus($nick);
		if ($status < 5) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para poder administrar las preferencias', true);
		else {
			if ($type == "ajoin") {
				if ($data != "on" && ($data != "off")) $tg->msgSintaxError(CHANNEL,"!set ajoin on/off", true);
				else {
					$query = $tg->dbSend("SELECT valor FROM ".DB_PREFIX."settings WHERE `campo`='ajoin' AND `bot_number`='".BOT_NUMBER."'");
					$result = mysql_result($query,0);
					if ($data == "on") {
						if ($result == 1) $tg->ircMsg(CHANNEL,"El ajoin ya estaba activado", true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."settings SET `valor`='1' WHERE `campo`='ajoin' AND `bot_number`='".BOT_NUMBER."'");
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'ajoin',$data);
							$tg->ircMsg(CHANNEL,"El ajoin ahora esta activado", true);
						}
					}
					elseif ($data == "off") {
						if (!$result) $tg->ircMsg(CHANNEL,"El ajoin ya estaba desactivado", true);
						else {
							$tg->dbSend("UPDATE ".DB_PREFIX."settings SET `valor`='0' WHERE `campo`='ajoin' AND `bot_number`='".BOT_NUMBER."'");
							if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'ajoin',$data);
							$tg->ircMsg(CHANNEL,"El ajoin ahora esta desactivado", true);
						}
					}
				}
			}
			elseif ($type == "ignore") {
				if (empty($data) || (!is_numeric($data))) $tg->msgSintaxError(CHANNEL,"!set ignore secs", true);
				else {
					$tg->dbSend("UPDATE ".DB_PREFIX."settings SET `valor`='$data' WHERE `campo`='ignore_secs'");
					if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'chg_defaultignore',$data);
					$tg->ircMsg(CHANNEL,"Ahora el ignore por defecto es de $data segundos", true);
				}
			}
			elseif ($type == "bote") {
				if (empty($data) || ($data > 100 || ($data < 0))) $tg->msgSintaxError(CHANNEL,'!set bote [0,100]%');
				else {
					$tg->dbSend("UPDATE ".DB_PREFIX."settings SET `valor`='$data' WHERE `campo`='bote_percent'");
					if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'chg_percent',$data);
					$tg->ircMsg(CHANNEL,"Ahora se añadiran al bote el $data% del valor total", true);
				}
			}
			elseif ($type == 'portero') {
				if (empty($data)) $tg->msgSintaxError(CHANNEL,"!set portero 'portero'");
				else {
					$tg->dbSend("UPDATE ".DB_PREFIX."settings SET `valor`='$data' WHERE `campo`='portero'");
					$this->portero = $data;
					if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($nick,'chg_goalkeeper',$data);
					$tg->ircMsg(CHANNEL,"Ahora será $data el que defienda la porteria de topGames", true);
				}
			}
			elseif ($type == 'help') $tg->ircMsg(CHANNEL, 'Ayuda '.$tg->h('!set ajoin/ignore/bote/portero'), true);
		}
	}
	function opers($tg,$type,$data,$nick) {
		if ($type == "log") {
			if (is_array($data) && (!is_numeric($data[1]))) $tg->msgSintaxError(CHANNEL,'!opers log nick [num_lineas]', true);
			else {
				$status = $tg->getNickStatus($nick);
				if ($status < 5) $tg->ircMsg(CHANNEL, 'Lo siento '.$tg->h($nick).', pero necesitas ser '.$tg->h('administrador').' como minimo para ver logs de operadores', true);
				else {
					$oper = $nick;
					if (!is_array($data)) {
						$lines = 3;
						$nick = $data;
					}
					else {
						$lines = $data[1];
						$nick = $data[0];
					}
					$log = $tg->readUserLog($channel,$lines);
					if (!$log) $tg->ircMsg(CHANNEL,"No existen datos para el operador $nick", true);
					else {
						if (LOG_STATUS && (in_array('opers',$_CFG["LOG_REC"]))) $tg->writeOperLog($oper,'checkedlog_oper',$nick);
						foreach ($log AS $line) {
							$line = unserialize($line);
							$day = getdate($line[0]);
							foreach ($day AS $value=>$content) {
								if ($value == 'mday' || ($value == 'mon' || ($value == 'hours' || ($value == 'minutes' || ($value == 'seconds'))))) {
									if (strlen($content) == 1) $day[$value] = (int) '0'.$content;
								}
							}
							$day = $day["mday"].'/'.$day["mon"].'/'.$day["year"].' - '.$day["hours"].':'.$day["minutes"].':'.$day["seconds"];
							$message = $line[1];
							if ($message == "joinall") $textMessage = 'Ejecuta un ajoin a todos los canales';
							elseif ($message == "add_channel") $textMessage = 'Añade el canal '.$line[2].' al bot';
							elseif ($message == "del_channel") $textMessage = 'Borra el canal '.$line[2].' del bot';
							elseif ($message == "partall") $textMessage = 'Ejecuta un partall a todos los canales';
							elseif ($message == "suspend_channel") $textMessage = 'Suspende el canal '.$line[2];
							elseif ($message == "unsuspend_channel") $textMessage = 'Quita el suspenso al canal '.$line[2];
							elseif ($message == "join") $textMessage = 'Fuerza al bot a entrar a '.$line[2];
							elseif ($message == "part") $textMessage = 'Fuerza el bot a salir de '.$line[2];
							elseif ($message == "forbid_channel") $textMessage = 'Prohibe el canal '.$line[2];
							elseif ($message == "unforbid_channel") $textMessage = 'Quita la prohibicion al canal '.$line[2];
							elseif ($message == "checkedlog_channel") $textMessage = 'Mira el log del canal '.$line[2];
							elseif ($message == "add_user") $textMessage = 'Creo el usuario '.$line[2];
							elseif ($message == "del_user") $textMessage = 'Borro el usuario '.$line[2];
							elseif ($message == "suspend_user") $textMessage = 'Suspende el usuario '.$line[2];
							elseif ($message == "unsuspend_user") $textMessage = 'Quita el suspenso al usuario '.$line[2];
							elseif ($message == "forbid_user") $textMessage = 'Prohibe el usuario '.$line[2];
							elseif ($message == "unforbid_user") $textMessage = 'Quita la prohibicion al usuario '.$line[2];
							elseif ($message == "checkedlog_user") $textMessage = 'Mira el log del usuario '.$line[2];
							elseif ($message == "massmsg") $textMessage = 'Envia un mensaje masivo con el texto '.$line[2];
							elseif ($message == "setbank") $textMessage = 'Cambia el banco de '.$line[2];
							elseif ($message == "delbank") $textMessage = 'Elimina el banco de '.$line[2];
							elseif ($message == "chgbank") $textMessage = 'Migra el banco de '.$line[2];
							elseif ($message == "ajoin") {
								if ($line[2] == 'on') $textMessage = 'Activa el ajoin';
								else $textMessage = 'Desactiva el ajoin';
							}
							elseif ($message == "chg_defaultignore") $textMessage = 'Cambia los segundos de ignore por defecto a '.$line[2];
							elseif ($message == "chg_percent") $textMessage = 'Cambia el porcentaje de adición al bote a '.$line[2];
							elseif ($message == "del_oper") $textMessage = 'Revoca los poderes de administración de '.$line[2];
							elseif ($message == "add_preoper") $textMessage = 'Añade como pre-operador a '.$line[2];
							elseif ($message == "added_preoper") $textMessage = 'Fué añadido como pre-operador por '.$line[2];
							elseif ($message == "add_oper") $textMessage = 'Añade como operador a '.$line[2];
							elseif ($message == "added_oper") $textMessage = 'Fué añadido como operador por '.$line[2];
							elseif ($message == "add_coadmin") $textMessage = 'Añade como co-administrador a '.$line[2];
							elseif ($message == "added_coadmin") $textMessage = 'Fué añadido como co-administrador por '.$line[2];
							elseif ($message == "deleted_oper") $textMessage = 'Los poderes de administración fueron revocados por '.$line[2];
							elseif ($message == "chg_goalkeeper") $textMessage = 'Cambia el portero a '.$line[2]; 
							$tg->ircMsg(CHANNEL,$textMessage);
						}
					}
				}
			}
		}
	}
	function disconnect($tg,$nick) {
		$status = $tg->getNickStatus($nick);
		if ($status < 5) $tg->ircMsg(CHANNEL, "Sólo los administradores tienen permiso para desconectar el bot", true);
		else {
			$message = "Desconexion solicitada por $nick";
			if (LOG_STATUS) {
				global $_CFG;
				if (in_array('status', $_CFG['LOG_REC']) || (in_array('errors', $_CFG['LOG_REC']))) $tg->writeLog($message);
			}
			echo "[-] $message\n";
			$tg->doPing('off');
			$tg->ircMsg(CHANNEL, "Desconectando el bot a peticion de $nick", true);
			$tg->ircSend('QUIT :topGames '.TOPGAMES_VERSION);
			sleep(3);
			die();
		}
	}
}
?>